package com.financing.wap.dao;


import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.financing.wap.common.Pager;
import com.financing.wap.dto.FpProjectRabate;
import com.financing.wap.dto.MailRecordDTO;
import com.financing.wap.dto.ProductAnnualRevenueDTO;
import com.financing.wap.dto.ProductAttachmentDTO;
import com.financing.wap.dto.ProductBasicInfoDTO;
import com.financing.wap.dto.ProductDTO;
import com.financing.wap.dto.ProductDetailPageDTO;
import com.financing.wap.dto.ProductRecommendDTO;
import com.financing.wap.dto.ProjectAccountDTO;
import com.financing.wap.dto.UserDTO;

/**
 * 产品查询DTO
 * @author hetaihe
 *
 */
public interface IProductDao extends IBaseDao<ProductDTO, Integer> {
	
	public List<ProductDTO> getProductList(Map<String,Object> queryParams, UserDTO user, Pager pager);
	
	public List<ProductDTO> getProductByType(Map<String,Object> queryParams);

	public int getProductListCount(Map<String,Object> queryParams, UserDTO user);
	
	
	/**
	 * 获得精品推荐产品，可能存在多个推荐产品，目前取最新的一个为推荐
	 * @param faId登陆FA的ID,size 推荐个数
	 * @return
	 */
	public  List<ProductDetailPageDTO> getRecommendProduct(Map<String,Object> parames);
	
	/**
	 * 获取最新产品
	 * @return
	 */
	public ProductDetailPageDTO getLatestProduct();
	
	/**
	 * 获得产品详情信息
	 * @param productId
	 * @return
	 */
	public ProductDetailPageDTO getProductDetailPage(Integer productId);
	
	/**
	 * 获得产品返利及收益情信息, 按照返利排序
	 * @param productId
	 * @return
	 */
	public List<FpProjectRabate> getProductProfitRebateList(Integer productId);
	
	/**
	 * 根据产品ID获取此产品各种订单的状态，可用于计算预约数等
	 * @param productId
	 * @return
	 */
	public List<Map<String, Object>> getProductOrderStat(Integer productId);
	
	public Integer getProductIdByProductCode(String productCode);
	
	
	/**
	 * 产品收益信息，
	 * @param id 产品ID
	 * @param sort 排序方式，h：最高收益，l:最低收益
	 * @return
	 */
	public ProductAnnualRevenueDTO queryAnnualRevenue(int id,String sort);
	
	/**
	 * 产品收益信息，
	 * @param id 产品ID
	 * @param sort 排序方式，h：最高收益，l:最低收益
	 * @return
	 */
	public ProductAnnualRevenueDTO queryCurrentAnnualRevenue(int id,String sort);
	
	/**
	 * 产品预约总金额和预约数
	 * productId 产品ID
	 * @return
	 */
	public Map<String,Object> queryProductBuyNumberAndAmount(Integer productId);
//	/**
//	 * 产品预约总数
//	 * productId 产品ID
//	 * @return
//	 */
//	public BigDecimal queryProductBuyNumber(Integer productId);
	
	/**
	 * 
	* @Title: queryProjectAccount 
	* @Description: 查询产品募集账号信息
	* @param   projectId
	* @return List<ProjectAccountDTO>   
	* @throws
	 */
	public List<ProjectAccountDTO> queryProjectAccount(int projectId);
	
	/**
	 * 获取产品附件
	 * @return
	 */
	public List<ProductAttachmentDTO> getProductAttachments(ProductAttachmentDTO  a);

	/**
	 * 邮件分享记录表
	 * @return
	 */
	public Integer insertMailRecord(MailRecordDTO  mailRecordDTO);
	
	/**
	 * 产品网站地图
	 * @return
	 */
	public List<Map> querySiteMapProjectList();
	
	/**
	 * 私募网站地图
	 * @return
	 */
	public List<Map> querySiteMapFundList();
	
	/**
	 * 活动网站地图
	 * @return
	 */
	public List<Map> querySiteMapActivitiesList();
	
	/**
	 * 信托公司网站地图
	 * @return
	 */
	public List<Map> querySiteMapProjectCompanyList();
	
	/**
	 * 根据产品code 获取产品基本信息
	 */
	public ProductBasicInfoDTO queryBasicInfo(String code);
	/**
	 * 根据产品code 获取产品基本信息  不过滤状态
	 */
	public ProductBasicInfoDTO queryAllProductBasicInfo(String code);

	/**
	 * 产品数量统计
	 * @return
	 */
	public Map<String, Integer> queryProjectAmountCount();
	
	/**
	 * 根据产品CODE查询
	 * @param pcode
	 * @return
	 */
	public List<ProductDTO> getProductByPcode(Integer pid);

	/**
	 * PEVC产品列表count
	 * @param pcode
	 * @return
	 */
	public int getProductPEVCListCount(Map<String,Object> params);

	/**PEVC产品列表
	 * @param params
	 * @return
	 */
	public List<ProductDTO> getProductPEVCList(Map<String, Object> params);

	public List<ProductDTO> getProductName();

	public int queryProductSubBypId(Map<String, Object> params);
	
	public List<Map<String, Object>> getMediaSourceProduct(Map<String,Object> map) throws SQLException;

	public List<ProductRecommendDTO> getRecommendFundProduct();

	public List<ProductDTO> getRecommendProductForProductInfo(Map<String, Object> map)throws SQLException;

	public String getProductNameByProductCode(String param);
}
